﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Linq;
using System.Data.SqlClient;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Transactions;
using System.Net.Mail;
using System.Net.Mime;
using BS_Gimnasio.General;
using DS_Gimnasio;

namespace BS_Gimnasio.Logistica
{
    [DataContract()]
    public class cls_Reporte : cls_Base
    {
        #region Variables

        private string _idFactura;
        private string _usuario;
        private string _cliente;
        private string _servicio;
        private string _estado;
        private string _fecha;
        private string _sede;
        private string _proveedor;
        private string _producto;
        private string _idProducto;
        private string _tipo_alerta;

        private string _reporte;
        private string _correo;

        #endregion

        #region Propiedades
        [DataMember()]
        public string IdProducto
        {
            get { return _idProducto; }
            set { _idProducto = value; }
        }
        [DataMember()]
        public string Producto
        {
            get { return _producto; }
            set { _producto = value; }
        }
        [DataMember()]
        public string Tipo_alerta
        {
            get { return _tipo_alerta; }
            set { _tipo_alerta = value; }
        }
        [DataMember()]
        public string Reporte
        {
            get { return _reporte; }
            set { _reporte = value; }
        }
        [DataMember()]
        public string Correo
        {
            get { return _correo; }
            set { _correo = value; }
        }

        [DataMember()]
        public string IdFactura
        {
            get { return _idFactura; }
            set { _idFactura = value; }
        }

        [DataMember()]
        public string Usuario
        {
            get { return _usuario; }
            set { _usuario = value; }
        }

        [DataMember()]
        public string Cliente
        {
            get { return _cliente; }
            set { _cliente = value; }
        }

        [DataMember()]
        public string Servicio
        {
            get { return _servicio; }
            set { _servicio = value; }
        }

        [DataMember()]
        public string Estado
        {
            get { return _estado; }
            set { _estado = value; }
        }

        [DataMember()]
        public string Fecha
        {
            get { return _fecha; }
            set { _fecha = value; }
        }

        [DataMember()]
        public string Sede
        {
            get { return _sede; }
            set { _sede = value; }
        }

        [DataMember()]
        public string Proveedor
        {
            get { return _proveedor; }
            set { _proveedor = value; }
        }

        #endregion

        #region Metodos Heredados

        public override void InsertarActualizarRegistro(bool tipoOperacion, ref string mensajeError)
        {
            throw new NotImplementedException();
        }

        private void InsertarRegistro(ref string mensajeError)
        {
            throw new NotImplementedException();
        }

        private void ActualizarRegistro(ref string mensajeError)
        {
            throw new NotImplementedException();
        }

        public override cls_Base TraerObjeto()
        {
            throw new NotImplementedException();
        }

        public override bool EliminarRegistro(ref string mensajeError)
        {
            throw new NotImplementedException();
        }

        public override DataTable Listar(int opcion)
        {
            try
            {
                DataTable dt = new DataTable();

                using (dtacls_GimnasioDataContext db = new dtacls_GimnasioDataContext())
                {
                    if (opcion == 1)
                    {
                        throw new NotImplementedException();
                    }

                    else if (opcion == 2)
                    {
                        if (_reporte == "CR_Facturas_Clientes.rpt")
                        {
                            ISingleResult<SP_Seleccionar_Filtro_Facturas_ClientesResult> resultado = db.SP_Seleccionar_Filtro_Facturas_Clientes(_idUsuarioInicioSeccion, _idFactura, _cliente, _estado, _sede, _fecha);

                            dt = cls_Adaptador.ToDataTable(resultado.ToList());
                        }
                        else
                            if (_reporte == "CR_Facturas_Externas.rpt")
                            {
                                ISingleResult<SP_Seleccionar_Filtro_Facturas_ExternasResult> resultado = db.SP_Seleccionar_Filtro_Facturas_Externas(_idUsuarioInicioSeccion, _usuario, _idFactura, _estado, _fecha);

                                dt = cls_Adaptador.ToDataTable(resultado.ToList());
                            }
                            else
                                if (_reporte == "CR_Facturas_Proveedores.rpt")
                                {
                                    ISingleResult<SP_Seleccionar_Filtro_Facturas_ProveedoresResult> resultado = db.SP_Seleccionar_Filtro_Facturas_Proveedores(_idUsuarioInicioSeccion, _proveedor, _idFactura, _estado, _fecha);

                                    dt = cls_Adaptador.ToDataTable(resultado.ToList());
                                }
                                else
                                    if (_reporte == "CR_Facturas_Servicios.rpt")
                                    {
                                        ISingleResult<SP_Seleccionar_Filtro_Facturas_ServiciosResult> resultado = db.SP_Seleccionar_Filtro_Facturas_Servicios(_idUsuarioInicioSeccion, _idFactura, _cliente, _servicio);

                                        dt = cls_Adaptador.ToDataTable(resultado.ToList());
                                    }
                                    else
                                        if (_reporte == "CR_Alertas.rpt")
                                        {
                                            ISingleResult<SP_Seleccionar_Filtro_AlertasResult> resultado = db.SP_Seleccionar_Filtro_Alertas(_idUsuarioInicioSeccion, _producto, _fecha, _tipo_alerta);

                                            dt = cls_Adaptador.ToDataTable(resultado.ToList());
                                        }
                                        else
                                            if (_reporte == "CR_Productos.rpt")
                                            {
                                                ISingleResult<SP_Seleccionar_Filtro_Productos_ReporteResult> resultado = db.SP_Seleccionar_Filtro_Productos_Reporte(_idUsuarioInicioSeccion, _idProducto, _producto, _sede);

                                                dt = cls_Adaptador.ToDataTable(resultado.ToList());
                                            }
                                            else
                                                if (_reporte == "CR_Pago_Proveedores.rpt")
                                                {
                                                    ISingleResult<SP_Seleccionar_Filtro_Pago_ProveedoresResult> resultado = db.SP_Seleccionar_Filtro_Pago_Proveedores(_idUsuarioInicioSeccion, _idFactura, _proveedor, _fecha);

                                                    dt = cls_Adaptador.ToDataTable(resultado.ToList());
                                                }
                    }
                    return dt;
                }
            }

            catch (SqlException ex)
            {
                NumeroError = ex.ErrorCode;
                MensajeError = ex.Message;

                return null;
            }

            catch (Exception e)
            {
                MensajeError = e.Message;

                return null;
            }
        }

        public override void OtrosProcesos(int opcion, ref object resultado)
        {
            switch (opcion)
            {
                case 1:
                    resultado = this.EnviarReporte();
                    break;
                default:
                    break;

            }
        }
        
        #endregion

        #region Metodos Propios
        public string EnviarReporte()
        {
            try
            {
                Attachment item = new Attachment("C:\\temp\\Reporte.pdf", MediaTypeNames.Application.Pdf);
                ContentDisposition disposition = item.ContentDisposition;

                cls_EnviarCorreos enviarCorreo = new cls_EnviarCorreos()
                {
                    Destinatario = this.Correo,
                    Asunto = string.Format("Reporte"),
                    Mensaje = string.Format("Se adjunta reporte solicitado"),
                    HTML = true,
                    Archivo = item,
                    
                };
                enviarCorreo.envioCorreoElectronico(IdUsuarioInicioSeccion, ref Filtros[0]);
                return Filtros[0];
            }

            catch (Exception e)
            {
                MensajeError = e.Message; return e.Message;
            }
        }

        #endregion

    }
}
